package dongshi.daddy.templatemethod.studyabroad;

// 抽象类: 出国留学
public abstract class StudyAbroad {
    // 模板方法
//    public void TemplateMethod() {
    // 模板方法，设置为final的防止子类override
    public final void TemplateMethod() {
        // 索取学校资料
        lookingForSchool();
        // 入学申请
        applyForEnrol();
        // 办理因私出国护照、出境卡和公证
        applyForPassport();
        // 申请签证
        applyForVisa();
        // 体检、订机票、准备行装
        readyGoAbroad();
        // 抵达
        arriving();
    }

    // 具体方法，父类提供具体的实现，设置为private对子类不可见并且不可以重写
//    public void applyForPassport() {
    private void applyForPassport() {
        System.out.println("三.办理因私出国护照、出境卡和公证：");
    }

    // 具体方法，父类提供具体的实现，设置为private对子类不可见并且不可以重写
//    public void applyForVisa() {
    private void applyForVisa() {
        System.out.println("四.申请签证：");
    }

    // 具体方法，父类提供具体的实现，设置为private对子类不可见并且不可以重写
//    public void readyGoAbroad() {
    private void readyGoAbroad() {
        System.out.println("五.体检、订机票、准备行装：");
    }

    // 索取学校资料
    public abstract void lookingForSchool();

    // 入学申请
    public abstract void applyForEnrol();

    // 抵达
    public abstract void arriving();
}
